\section{\label{curveobject}Curve Object}

In the library both B-spline and NURBS curves are stored in a struct SISLCurve containing
the following:
\input{type/SISLCurve}
Note that in the rational case are the curve coefficients stored as
\newline
${w_1  {\bf p}_1, w_1, w_2 {\bf p}_2, w_2, \ldots,
  w_n  {\bf p}_n, w_n}$ where $w_i$ are the weights and ${\bf p}_i$, $i=1, \ldots, n$ are the
curve coefficients.

When using a curve, do not declare a SISLCurve but a pointer to a SISLCurve,
and initialize it to point on NULL. Then you may use the
dynamic allocation functions newCurve and freeCurve described below,
to create and delete curves.

There are two ways to pass coefficient and knot arrays
to newCurve.
By setting $icopy=1$, newCurve
allocates new arrays and copies the given ones.
But by setting $icopy=0$ or 2, newCurve simply points
to the given arrays. Therefore it is IMPORTANT that the
given arrays have been allocated in free memory beforehand.

\pgsbreak
\input{func/newCurve}
\pgsbreak
\input{func/copyCurve}
\pgsbreak
\input{func/freeCurve}
